import 'dart:io';

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';

// 自定义 ImageWidget，支持自动判断图片类型
class ImageWidget extends StatelessWidget {
  // 图片数据源（String 类型）
  final String data;

  // 宽度、高度、fit 等通用属性
  final double? width;
  final double? height;
  final BoxFit? fit;

  // 颜色 tint 和混合模式
  final Color? color;
  final BlendMode? colorBlendMode;

  // 圆角
  final BorderRadius? borderRadius;

  // 背景颜色
  final Color? backgroundColor;

  // 边框
  final BoxBorder? border;

  // 占位图 Widget（全局默认可通过静态变量设置）
  final Widget? placeholder;

  // 错误处理 Widget（全局默认可通过静态变量设置）
  final Widget? errorWidget;

  // 全局默认占位图（可静态设置）
  static Widget defaultPlaceholder = const SizedBox.shrink();

  // 全局默认错误 Widget（可静态设置）
  static Widget defaultErrorWidget = const SizedBox.shrink();

  const ImageWidget({
    super.key,
    required this.data,
    this.width,
    this.height,
    this.fit = BoxFit.cover,
    this.color,
    this.colorBlendMode,
    this.borderRadius,
    this.backgroundColor,
    this.border,
    this.placeholder,
    this.errorWidget,
  });

  @override
  Widget build(BuildContext context) {
    // 使用传入的或全局默认的占位和错误 Widget
    final effectivePlaceholder = placeholder ?? defaultPlaceholder;
    final effectiveErrorWidget = errorWidget ?? defaultErrorWidget;

    // 构建内部图片 Widget
    Widget imageWidget;
    if (data.startsWith('http') || data.startsWith('https')) {
      // 网络图片：使用 CachedNetworkImage 进行缓存
      imageWidget = CachedNetworkImage(
        imageUrl: data,
        width: width,
        height: height,
        fit: fit,
        color: color,
        colorBlendMode: colorBlendMode,
        placeholder: (context, url) => effectivePlaceholder,
        errorWidget: (context, url, error) => effectiveErrorWidget,
      );
    } else if (data.startsWith('assets/')) {
      // Assets 图片：使用 Image.asset
      imageWidget = Image.asset(
        data,
        width: width,
        height: height,
        fit: fit,
        color: color,
        colorBlendMode: colorBlendMode,
        errorBuilder: (context, error, stackTrace) => effectiveErrorWidget,
      );
    } else {
      // 本地文件：使用 Image.file（假设 data 是文件路径）
      // 可处理 file:// 前缀
      String filePath = data.startsWith('file://') ? data.substring(7) : data;
      imageWidget = Image.file(
        File(filePath),
        width: width,
        height: height,
        fit: fit,
        color: color,
        colorBlendMode: colorBlendMode,
        errorBuilder: (context, error, stackTrace) => effectiveErrorWidget,
      );
    }

    // 如果有背景颜色、圆角或边框，使用 Container 包裹
    if (backgroundColor != null || borderRadius != null || border != null) {
      imageWidget = Container(
        width: width,
        height: height,
        decoration: BoxDecoration(color: backgroundColor, borderRadius: borderRadius, border: border),
        child: ClipRRect(borderRadius: borderRadius ?? BorderRadius.zero, child: imageWidget),
      );
    }

    return imageWidget;
  }
}
